package com.ttbj.api.salesman;

import java.util.List;

import com.ttbj.api.dto.Page;
import com.ttbj.api.dto.RoleDto;
import com.ttbj.api.dto.SalesmanDto;
import com.ttbj.api.exception.BusinessException;




public interface RoleService {
    /**
     * 根据用户ID查询用户角色
     * @param userId 用户主键ID
     * @return 角色详细信息
     * @throws BusinessException
     */
    RoleDto querySalemanRoleById(Long salemanId) throws BusinessException;

    /**
     * 分页查询所有角色
     * @return
     * @throws BusinessException
     */
    List<RoleDto> queryAllSalemanRoleByPage(Page page, SalesmanDto salesmanDto) throws BusinessException;

    /**
     * 查询所有角色
     * @return
     * @throws BusinessException
     */
    List<RoleDto> queryAllSalemanRole(RoleDto userRoleDto, SalesmanDto salesmanDto) throws BusinessException;

    /**
     * 统计所有角色数量
     * @return
     * @throws BusinessException
     */
    int queryAllSalemanRoleByPageCount(SalesmanDto salesmanDto) throws BusinessException;

    /**
     * 新增角色。不能有重复的root和admin角色名称，做出了限制，其他角色名称可以重复。
     * @param role
     * @param salesmanDto 当前登陆用户对象
     * @throws BusinessException
     */
    void addRole(RoleDto roleDto, SalesmanDto salesmanDto) throws BusinessException;


    /**
     * 删除角色
     * @param roleId 角色ID
     */
    void deleteRoleById(Long roleId) throws BusinessException;

    /**
     * 根据ID更新角色
     * @param role
     * @throws BusinessException
     */
    void updateRoleById(RoleDto roleDto) throws BusinessException;

    /**
     * 根据ID查询角色
     * @param roleId 角色ID
     * @return
     */
    RoleDto queryRoleById(long roleId) throws BusinessException;

    /**
     * 根据角色名查询角色
     * @param rolename 角色名
     * @return
     */
    RoleDto queryRoleByName(String rolename) throws BusinessException;
    
    /**
     * 根据公司编号查询拥有的角色
     * @param comNum
     * @return 角色列表
     * @throws BusinessException
     */
    List<RoleDto> findRolesByComnum(SalesmanDto salesmanDto) throws BusinessException;

}
